Java 实现最大堆(1) | 您所在的位置:网站首页 › java 最大堆 › Java 实现最大堆(1) |
return heap; } public HeapImpl() { this.heap = new ArrayList(); } /** * 插入对应上浮 * * @param start */ protected void adjustUp(int start) { int currentIndex = start; int parentIndex = (currentIndex - 1) / 2; T tmp = heap.get(currentIndex); while (currentIndex > 0) { int cmp = heap.get(parentIndex).compareTo(tmp); if (cmp >= 0) { break; } else { heap.set(currentIndex, heap.get(parentIndex)); currentIndex = parentIndex; parentIndex = (parentIndex - 1) / 2; } } heap.set(currentIndex, tmp); } public void insert(T data) { int size = heap.size(); heap.add(data); // 将"数组"插在表尾 adjustUp(size); // 向上调整堆 } public void remove(int index) { int size = heap.size(); heap.set(index, heap.get(size - 1)); heap.remove(size - 1); adjustDown(index); } /** * 删除对应下沉 * * @param index */ private void adjustDown(int index) { int currentIndex = index; int leftChildIndex = index * 2 + 1; int rightChildIndex = index * 2 + 2; T tmp = heap.get(currentIndex); int size = heap.size(); while (leftChildIndex < size) { T left = null; T right = null; if (leftChildIndex < size) { left = heap.get(leftChildIndex); } if (rightChildIndex < size) { right = heap.get(rightChildIndex); } int maxIndex = right == null ? leftChildIndex : (left.compareTo(right) >= 0 ? leftChildIndex : rightChildIndex); T max = heap.get(maxIndex); if(tmp.compareTo(max)>= 0){ break; } else{ heap.set(currentIndex, max); heap.set(maxIndex, tmp); leftChildIndex = maxIndex * 2 + 1; rightChildIndex = maxIndex + 1; } } } public void makeHeap(int first, int last) { for ( int i = first; i < last; i++) { insert(orginList.get(i)); } } public void popHeap(int first, int last) { remove(first); } public void pushHeap(int first, int last) { adjustUp(last - 1); } public void display() { System.out.println(heap); } public static void main(String[] args) { IHeap heap = new HeapImpl(); heap.initOriginList(Arrays.asList( 10, 20, 30, 5, 15)); System.out.println( “初始构建堆:”); heap.makeHeap( 0, 5); 最后自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。 深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。 因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门! 如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!! 由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新! i4aZgod-1715705074030)] [外链图片转存中…(img-Rt4k73f1-1715705074030)] [外链图片转存中…(img-06Tzpk0s-1715705074030)] 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门! 如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!! 由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新! |
CopyRight 2018-2019 实验室设备网 版权所有 |